home *** CD-ROM | disk | FTP | other *** search
/ Workbench Add-On / Workbench Add-On - Volume 1.iso / BBS-Archive / Dev / tri13dev.lha / Triton / Developer / DICE / Boopsi.c next >
C/C++ Source or Header  |  1995-06-28  |  4KB  |  116 lines

  1. /*
  2.  *  Triton - The object oriented GUI creation system for the Amiga
  3.  *  Written by Stefan Zeiger in 1993-1994
  4.  *
  5.  *  (c) 1993-1994 by Stefan Zeiger
  6.  *  You are hereby allowed to use this source or parts
  7.  *  of it for creating programs for AmigaOS which use the
  8.  *  Triton GUI creation system. All other rights reserved.
  9.  *
  10.  */
  11.  
  12. #ifdef _DCC
  13. extern long __builtin_getreg(int);
  14. extern void __builtin_putreg(int, long);
  15. #endif /* _DCC */
  16.  
  17. #include "triton_lib.h"
  18.  
  19.  
  20. struct IClass *TRIM_trLogo;
  21. ULONG   REGS TRIM_trLogo_DrawBoopsiImage(struct Image *Image, struct impDraw *DrawMsg);
  22. ULONG   ASM TRIM_trLogo_DispatchBoopsiImage(REG(a0) struct IClass *Class, REG(a2) Object *Object, REG(a1) Msg ObjMsg);
  23.  
  24.  
  25. #define ARROWLENGTH 4
  26. #define LANCELENGTH 2
  27. #define CURVELENGTH 15
  28.  
  29. /// "void STACK TR_ScaledPolyDraw"
  30. void STACK TR_ScaledPolyDraw(struct RastPort *rport, UWORD len, WORD *array, ULONG orgwid, ULONG orghei, ULONG newwid, ULONG newhei, ULONG left, ULONG top) {
  31.   UWORD i;
  32.  
  33.   for(i=0;i<len;i++) {
  34.     array[i*2]=((array[i*2]*newwid)/orgwid)+left;
  35.     array[(i*2)+1]=((array[(i*2)+1]*newhei)/orghei)+top;
  36.   }
  37.   Move(rport, array[0], array[1]);
  38.   PolyDraw(rport, len-1, &array[2]);
  39. }
  40. ///
  41.  
  42. /// "ULONG REGS TRIM_trLogo_DrawBoopsiImage()"
  43. ULONG   REGS TRIM_trLogo_DrawBoopsiImage(struct Image *Image, struct impDraw *DrawMsg) {
  44.   struct        RastPort        * RPort           = DrawMsg->imp_RPort;
  45.   UWORD                     BackColor       = DrawMsg->imp_DrInfo->dri_Pens[BACKGROUNDPEN],
  46.                             TextColor       = DrawMsg->imp_DrInfo->dri_Pens[TEXTPEN];
  47.   WORD                      left            = Image->LeftEdge + DrawMsg->imp_Offset.X,
  48.                             top             = Image->TopEdge + DrawMsg->imp_Offset.Y,
  49.                             width           = Image->Width,
  50.                             height          = Image->Height,
  51.                             Arrow1Array[ARROWLENGTH*2] = {22,6, 30,2, 26,10, 22,6},
  52.                             Arrow2Array[ARROWLENGTH*2] = {34,18, 42,14, 38,22, 34,18},
  53.                             Arrow3Array[ARROWLENGTH*2] = {46,30, 54,26, 50,34, 46,30},
  54.                             LanceArray[LANCELENGTH*2] = {2,54, 36,20},
  55.                             CurveArray[CURVELENGTH*2] = {24,8, 22,10, 20,14, 19,18, 18,22, 19,26, 20,30, 22,34, 26,36, 30,37, 34,38, 38,37, 42,36, 46,34, 48,32};
  56.  
  57.   // Background
  58.   SetAfPt(RPort, NULL, -1);
  59.   SetAPen(RPort, BackColor);
  60.   SetDrMd(RPort, JAM1);
  61.   RectFill(RPort, left, top, left+width-1, top+height-1);
  62.  
  63.   // Adjust size (->square)
  64.   if(width>height) {
  65.     left+=((width-height)/2);
  66.     width=height;
  67.   }
  68.   else if(width<height) {
  69.     top+=((height-width)/2);
  70.     height=width;
  71.   }
  72.  
  73.   // Logo
  74.   SetAPen(RPort, TextColor);
  75.   TR_ScaledPolyDraw(RPort,ARROWLENGTH,Arrow1Array,56,56,width,height,left,top);
  76.   TR_ScaledPolyDraw(RPort,ARROWLENGTH,Arrow2Array,56,56,width,height,left,top);
  77.   TR_ScaledPolyDraw(RPort,ARROWLENGTH,Arrow3Array,56,56,width,height,left,top);
  78.   TR_ScaledPolyDraw(RPort,LANCELENGTH,LanceArray,56,56,width,height,left,top);
  79.   TR_ScaledPolyDraw(RPort,CURVELENGTH,CurveArray,56,56,width,height,left,top);
  80.  
  81.   return(TRUE);
  82. }
  83. ///
  84.  
  85. /// "ULONG ASM TRIM_trLogo_DispatchBoopsiImage"
  86. ULONG   ASM TRIM_trLogo_DispatchBoopsiImage(REG(a0) struct IClass *Class, REG(a2) Object *Object, REG(a1) Msg ObjMsg) {
  87.   ULONG retval;
  88.   struct Hook *hook=(struct Hook *)Class;
  89.   ULONG tempa4=__builtin_getreg(12);
  90.   __builtin_putreg(12,(ULONG)hook->h_Data);
  91.  
  92.   if(ObjMsg->MethodID==IM_DRAW) retval=TRIM_trLogo_DrawBoopsiImage((struct Image *)Object, (struct impDraw *)ObjMsg);
  93.   else retval=DoSuperMethodA(Class, Object, ObjMsg);
  94.  
  95.   __builtin_putreg(12,tempa4);
  96.   return retval;
  97. }
  98. ///
  99.  
  100. /// "BOOL REGS TRIM_trLogo_Init(VOID)"
  101. BOOL REGS TRIM_trLogo_Init(VOID) {
  102.   if((TRIM_trLogo = MakeClass(NULL, IMAGECLASS, NULL, 0, 0))) {
  103.     TRIM_trLogo->cl_Dispatcher.h_Entry = (HOOKFUNC)TRIM_trLogo_DispatchBoopsiImage;
  104.     TRIM_trLogo->cl_Dispatcher.h_Data  = (void *) __builtin_getreg(12);
  105.   }
  106.   return (BOOL)TRIM_trLogo;
  107. }
  108. ///
  109.  
  110. /// "VOID TRIM_trLogo_Free(VOID)"
  111. VOID REGS TRIM_trLogo_Free(VOID) {
  112.   if(TRIM_trLogo) FreeClass(TRIM_trLogo);
  113. }
  114. ///
  115.  
  116.